【SpringSecurity系列(十一)】自定义认证逻辑 您所在的位置:网站首页 spring security 自定义验证 【SpringSecurity系列(十一)】自定义认证逻辑

【SpringSecurity系列(十一)】自定义认证逻辑

#【SpringSecurity系列(十一)】自定义认证逻辑| 来源: 网络整理| 查看: 265

《深入浅出Spring Security》一书已由清华大学出版社正式出版发行,感兴趣的小伙伴戳这里->->>深入浅出Spring Security,一本书学会 Spring Security。

有小伙伴会说,自定义认证逻辑还不简单?是的,没错,松哥之前也多次教过大家如何自定义认证逻辑,无论是添加登录验证码还是修改登录数据库格式,都需要对认证逻辑作出调整。

之前我们自定义的一个核心思路就是自定义过滤器,在过滤器中做各种各样我们想做的事:

Spring Security 如何添加登录验证码?松哥手把手教你给微人事添加登录验证码前后端分离中,使用 JSON 格式登录原来这么简单!

上面这两篇文章都是使用了自定义过滤器的思路,这算是一种入门级的自定义认证逻辑了,不知道大家有没有想过,这种方式其实是有一些问题的。

举一个简单的例子,在添加登录验证码中,我为了校验验证码就自定义了一个过滤器,并把这个自定义的过滤器放入 SpringSecurity 过滤器链中,每次请求都会通过该过滤器。但实际上,只需要登录请求经过该过滤器即可,其他请求是不需要经过该过滤器的,这个时候,大家是不是就发现弊端了。

当然,如果你对性能没有极致追求,这种写法其实也问题不大,毕竟功能已经实现了,但是抱着学习的态度,今天松哥要在前面文章的基础上给大家介绍一个更加优雅的写法。

本文是我们 SpringSecurity 系列的第 11 篇,阅读本系列前面文章有助于更好的理解本文:

【SpringSecurity系列(一)】初识 Spring Security【SpringSecurity系列(二)】Spring Security入门【SpringSecurity系列(三)】定制表单登录【SpringSecurity系列(四)】登录成功返回JSON数据【SpringSecurity系列(五)】授权入门【SpringSecurity系列(六)】自定义登录用户【SpringSecurity系列(七)】通过 Spring Data Jpa 持久化用户数据【SpringSecurity系列(八)】用户还能自动登录?【SpringSecurity系列(九)】降低 RememberMe 的安全风险在微服务项目中,Spring Security 比 Shiro 强在哪?

好了,不废话了,我们开始今天的文章。

1.认证流程简析

AuthenticationProvider 定义了 Spring Security 中的验证逻辑,我们来看下 AuthenticationProvider 的定义:

代码语言:javascript复制public interface AuthenticationProvider { Authentication authenticate(Authentication authentication) throws AuthenticationException; boolean supports(Class authentication); }

可以看到,AuthenticationProvider 中就两个方法:

authenticate 方法用来做验证,就是验证用户身份。supports 则用来判断当前的 AuthenticationProvider 是否支持对应的 Authentication。

这里又涉及到一个东西,就是 Authentication。

玩过 Spring Security 的小伙伴都知道,在 Spring Security 中有一个非常重要的对象叫做 Authentication,我们可以在任何地方注入 Authentication 进而获取到当前登录用户信息,Authentication 本身是一个接口,它实际上对 java.security.Principal 做的进一步封装,我们来看下 Authentication 的定义:

代码语言:javascript复制public interface Authentication extends Principal, Serializable { Collection


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有